{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append(\"../../\")\n",
    "from mymodel.Show import show\n",
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "from torch import nn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 生成数据\n",
    "import torch.utils\n",
    "import torch.utils.data\n",
    "\n",
    "\n",
    "n_train, n_test, n_inputs, batch_size = 20, 100, 200, 5\n",
    "true_w, true_b = torch.ones((n_inputs, 1)) * 0.01, 0.05\n",
    "X = torch.normal(0,1,size=(n_train,n_inputs))\n",
    "Y = X @ true_w + true_b + torch.normal(0,0.01,size=(n_train,1))\n",
    "train_data = [(x,y) for x in X for y in Y]\n",
    "X = torch.normal(0,1,size=(n_test,n_inputs))\n",
    "Y = X @ true_w + true_b + torch.normal(0,0.01,size=(n_test,1))\n",
    "test_data = [(x,y) for x in X for y in Y]\n",
    "train_iter = torch.utils.data.DataLoader(train_data,shuffle=True,batch_size=batch_size)\n",
    "test_iter = torch.utils.data.DataLoader(test_data,shuffle=False,batch_size=batch_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[tensor([[ 5.7403e-01,  1.7297e+00, -5.2046e-01, -2.1129e-01,  1.3535e+00,\n",
       "           1.4373e+00, -8.6351e-01,  9.2308e-02, -7.1672e-01, -1.8965e+00,\n",
       "           1.1942e+00,  4.7028e-01,  1.3199e-01,  5.8635e-01, -9.5351e-01,\n",
       "           4.2862e-02, -4.8981e-01,  1.2258e+00,  9.0699e-01,  3.6898e-01,\n",
       "          -4.9811e-01,  8.3697e-01, -8.8097e-01, -5.2790e-01, -1.8477e-01,\n",
       "           6.3032e-01, -7.7321e-01,  1.8889e+00,  6.3714e-01, -1.3150e-02,\n",
       "          -1.2134e+00,  1.9867e+00, -1.1098e+00, -1.4151e+00,  3.5046e-01,\n",
       "          -1.7527e+00,  4.4327e-01, -1.3604e+00,  1.1566e-01,  4.0683e-01,\n",
       "           1.1630e-01, -7.8584e-01, -1.0397e+00, -1.3037e-01, -1.6808e+00,\n",
       "          -1.4220e+00,  2.0417e-01, -9.0440e-01, -5.7155e-01, -7.9407e-01,\n",
       "          -4.3171e-01,  3.1162e-01,  2.5553e-01,  3.9097e-01, -3.4213e-01,\n",
       "           1.2564e+00,  1.1333e-01,  3.5711e-01,  5.0015e-01, -6.4072e-01,\n",
       "           2.0003e-01,  8.1082e-01,  9.9710e-01,  5.2075e-01,  9.7476e-01,\n",
       "           3.6298e-02,  3.2984e-01,  1.8067e+00, -5.2935e-01, -1.1735e+00,\n",
       "           7.1718e-01, -1.4625e+00,  2.0444e-01, -2.2289e+00,  2.4244e+00,\n",
       "          -1.1112e-01,  1.5131e+00, -6.7605e-01, -5.6297e-01,  4.9742e-01,\n",
       "          -3.7907e-01,  1.2072e+00, -2.0200e-01,  1.1961e+00, -5.5442e-01,\n",
       "           7.1795e-01,  1.7862e+00,  1.1033e+00,  2.0645e+00,  7.6679e-01,\n",
       "           7.4814e-01,  3.3028e-01,  5.2716e-01,  1.0325e+00, -9.7560e-02,\n",
       "          -1.3570e+00,  3.9703e-01,  1.2017e+00,  6.1147e-01, -1.1375e+00,\n",
       "           2.8553e+00,  5.7505e-01, -9.8196e-01, -1.1319e+00, -1.7249e-01,\n",
       "          -1.6110e+00,  2.9019e-01,  1.0876e+00,  4.5812e-02,  3.7965e-01,\n",
       "          -6.1148e-01,  6.5656e-01,  2.7186e-01,  2.5734e-01,  6.5553e-01,\n",
       "          -4.7688e-01, -1.2981e+00, -5.9990e-02, -1.3966e-01,  1.1122e+00,\n",
       "           7.3282e-01, -1.1380e+00,  6.6786e-01,  1.6312e+00, -8.9352e-01,\n",
       "          -2.6316e-01,  1.2751e+00, -7.2233e-01,  4.3318e-01,  1.4931e+00,\n",
       "           2.2317e+00,  7.0983e-01, -7.7680e-01,  5.7925e-01, -6.1202e-01,\n",
       "           4.6270e-01,  7.8190e-01,  1.6027e-01,  7.2599e-01, -1.0520e-01,\n",
       "          -1.1566e+00, -1.4953e+00,  2.3165e-01,  8.7137e-01,  1.3594e-01,\n",
       "           7.1308e-01,  3.4759e-01, -9.4092e-01,  8.4865e-02,  2.0613e-01,\n",
       "          -5.7625e-01,  1.4238e-01,  6.6987e-01, -7.8741e-01,  6.1793e-01,\n",
       "           6.1875e-01,  4.9659e-01,  1.7794e+00,  1.3745e-01,  6.1578e-01,\n",
       "          -3.3870e-01, -3.2408e-01, -6.5694e-01, -2.6783e+00,  1.5292e+00,\n",
       "           1.7160e+00, -5.0648e-01,  1.1284e+00,  8.7095e-01,  1.6191e+00,\n",
       "           9.1984e-01, -5.8658e-01,  9.0351e-01, -1.4706e-01,  4.1552e-01,\n",
       "          -3.8283e-02,  3.6189e-01, -3.0979e-01, -2.2762e-02, -5.2140e-01,\n",
       "           1.5459e-03, -1.1744e+00, -5.4298e-02,  8.4524e-01,  1.8322e+00,\n",
       "          -2.2406e+00,  5.6264e-01, -1.2829e+00, -1.0069e+00, -8.8834e-01,\n",
       "          -1.5267e+00,  4.4871e-01, -7.3709e-01,  4.5556e-01,  1.0104e+00,\n",
       "           1.2821e+00,  1.0621e+00, -4.1880e-01,  2.0407e-02,  1.6950e+00],\n",
       "         [ 7.5208e-01,  3.3753e-01, -1.1608e+00,  7.0886e-01, -1.1603e+00,\n",
       "           5.3810e-01,  2.0340e+00,  8.2465e-01, -1.1578e+00, -2.9817e-01,\n",
       "           6.3392e-02,  9.2852e-01, -3.0530e+00,  4.0510e-01,  1.2969e+00,\n",
       "           6.7325e-01, -2.8837e-01, -8.1358e-01, -4.4833e-01, -4.7137e-01,\n",
       "          -1.1956e-01,  3.5225e-01,  8.1731e-01, -9.1065e-01, -1.5795e+00,\n",
       "          -9.2422e-01,  3.1800e-02, -9.4055e-01, -1.7877e+00, -8.3181e-01,\n",
       "           8.8090e-01, -8.0457e-01,  2.3677e+00, -3.6476e-01,  2.2594e+00,\n",
       "          -6.2411e-01, -9.6092e-01, -4.1921e-01, -3.8398e-01, -2.2549e+00,\n",
       "           4.7398e-01, -2.1168e+00, -1.2538e+00,  5.5453e-02,  1.9809e-01,\n",
       "           6.8924e-01,  9.1672e-01,  5.2344e-01, -1.0291e+00, -1.1053e+00,\n",
       "          -1.5760e-02, -6.8695e-01, -2.6439e-01,  4.5144e-01,  3.6429e-01,\n",
       "          -7.5924e-01,  1.1170e+00,  1.0913e+00,  1.3697e-01,  1.6455e+00,\n",
       "           2.2790e-01, -4.8117e-01,  1.3975e+00, -7.3094e-01, -3.4282e-01,\n",
       "          -1.3821e+00, -1.8369e+00,  8.3175e-01, -8.1329e-01,  5.5955e-01,\n",
       "           1.2921e-01,  6.0192e-01,  3.9749e-01,  1.7725e+00, -3.6927e-01,\n",
       "           4.6412e-02, -8.2676e-01, -5.5457e-02, -1.2628e-01,  6.5276e-01,\n",
       "          -1.3108e+00, -5.6639e-01, -5.0523e-01, -1.1336e+00, -1.0123e+00,\n",
       "          -9.2040e-01,  7.7553e-01,  1.6061e+00,  1.3457e-01,  6.0408e-01,\n",
       "           1.3008e+00, -1.4777e-01,  5.1167e-01,  9.6926e-01,  8.6958e-01,\n",
       "          -9.6234e-01, -1.2298e+00,  1.6107e+00,  7.8933e-01, -7.0663e-01,\n",
       "           2.4730e-01,  4.7437e-01,  2.7816e+00, -2.4313e+00, -1.8392e+00,\n",
       "           4.8227e-01, -1.7780e+00, -1.9516e+00, -1.8942e-01,  4.5992e-01,\n",
       "           1.0259e+00, -9.9212e-01,  1.5781e-01, -1.5118e+00, -3.0867e-01,\n",
       "           1.3708e+00,  3.0335e-01,  6.7672e-01,  1.5826e-01,  1.2317e-01,\n",
       "           7.7139e-02,  6.1811e-01, -6.9118e-01, -1.5852e+00, -2.0840e-03,\n",
       "           3.4459e-01,  5.5142e-01,  9.8572e-01,  1.4815e-01, -5.6308e-01,\n",
       "           2.1024e+00,  1.0235e+00,  1.0624e+00, -5.3652e-01,  4.6197e-01,\n",
       "           1.2667e+00, -3.9252e-01,  1.7814e+00, -6.1518e-01, -1.6685e-01,\n",
       "           1.4661e-01,  5.9334e-01,  3.6583e-01, -1.1275e+00, -2.9069e-01,\n",
       "           6.4935e-01,  6.1922e-01,  6.6482e-01,  4.3984e-01,  4.9843e-01,\n",
       "           2.0666e+00,  3.3097e-01, -1.0058e-01, -1.2964e+00, -2.3607e+00,\n",
       "           5.9446e-02,  1.3586e+00,  2.0363e-01,  2.1823e+00, -8.0890e-01,\n",
       "          -1.7204e+00, -5.3439e-01, -3.5019e-01, -2.8925e-01, -3.4038e-01,\n",
       "           5.4459e-02,  2.7593e-01, -7.3224e-01,  5.6897e-02,  5.8153e-01,\n",
       "          -4.7304e-01, -1.2722e+00, -4.4786e-01, -1.9316e-01,  1.3010e+00,\n",
       "           2.4411e-01,  1.8334e-01, -5.7111e-01, -9.9160e-01, -1.1647e+00,\n",
       "          -1.9785e+00, -2.2023e+00,  1.6173e+00,  1.3293e+00, -1.0173e+00,\n",
       "          -8.4380e-01,  2.2438e-02,  9.8972e-02, -1.0652e-01, -4.6364e-01,\n",
       "          -9.3856e-01,  1.3443e+00,  5.3607e-01, -4.7238e-01, -1.0728e+00,\n",
       "           2.0438e+00, -9.8866e-01, -8.6860e-01, -2.7485e+00, -3.6256e-01],\n",
       "         [ 1.4065e+00, -6.7929e-01, -6.8564e-02, -4.7752e-01, -5.5565e-01,\n",
       "          -9.3924e-01,  1.3010e+00,  9.6999e-01,  5.6815e-01,  7.1162e-01,\n",
       "          -1.0343e+00, -1.4927e+00, -2.6744e-01, -6.5440e-02, -3.6644e-01,\n",
       "          -3.2557e-01, -1.1803e+00,  9.4713e-02,  5.9504e-01,  1.6708e-01,\n",
       "           3.9515e-02, -1.7065e+00,  1.8814e+00, -3.3788e-01, -4.6474e-01,\n",
       "           1.1832e+00, -3.8335e-01, -4.8201e-01, -1.6187e+00, -8.2491e-01,\n",
       "          -1.3858e+00, -1.4922e+00,  6.9812e-01,  2.1898e-01, -1.3041e+00,\n",
       "           9.7221e-01,  1.7098e+00,  1.1515e+00,  8.2648e-01,  1.7793e+00,\n",
       "           7.3816e-01, -3.9431e-01,  2.4644e-01,  3.8826e-01, -1.6694e-01,\n",
       "           2.7531e+00,  3.1855e-01,  4.3728e-01, -1.6876e+00,  2.0403e+00,\n",
       "          -8.6284e-01, -4.7016e-01,  1.9008e+00, -4.2039e-01,  9.2801e-02,\n",
       "          -5.8216e-02,  6.9634e-01, -1.3166e+00, -1.7715e-01, -4.3288e-01,\n",
       "           1.0426e+00,  8.0649e-01, -5.6161e-01, -3.0726e-01,  1.5433e+00,\n",
       "          -6.4865e-01,  1.1717e+00,  1.4950e+00, -8.6422e-01, -1.6508e+00,\n",
       "          -1.2102e+00, -3.3072e-01, -1.9573e-01, -1.1345e+00,  2.2068e-01,\n",
       "          -4.8161e-01,  1.1828e+00,  1.1043e+00,  2.9504e-01,  5.1708e-01,\n",
       "           8.5603e-01,  6.8668e-01,  7.3749e-01, -4.7391e-01,  1.1199e+00,\n",
       "           2.1087e+00, -1.1436e+00,  3.6633e-01,  8.8203e-01, -3.1166e-01,\n",
       "          -1.7153e-01,  2.0807e+00, -1.8977e-01, -1.5593e+00,  1.8536e-01,\n",
       "          -2.2554e+00,  1.5169e+00, -6.8185e-01,  8.4843e-01, -1.9646e+00,\n",
       "           6.4835e-01, -1.2676e+00,  1.2228e+00, -7.0524e-01,  1.8917e+00,\n",
       "           7.5265e-01,  1.4233e-01,  2.0059e+00,  1.6996e+00, -9.2440e-01,\n",
       "           1.3687e+00, -4.9973e-01,  8.2693e-01, -6.0351e-01, -1.0181e+00,\n",
       "          -1.8499e-01,  7.5981e-01, -1.0888e-02,  6.2327e-01, -1.1236e-01,\n",
       "           8.3060e-01, -1.2511e+00,  1.1312e+00,  8.6450e-01, -1.5377e-01,\n",
       "          -1.0072e+00, -1.8069e+00,  5.4764e-01,  1.5666e+00, -1.2249e+00,\n",
       "          -1.3298e+00, -5.7913e-02,  1.6615e+00,  4.0714e-01, -2.0053e+00,\n",
       "           1.9716e+00,  1.0832e+00, -1.0528e-01, -7.8421e-01,  1.0799e+00,\n",
       "           1.0524e+00,  1.1503e+00, -8.7764e-01, -1.0904e+00, -6.6085e-01,\n",
       "           1.1271e+00,  1.9238e+00,  1.0697e+00,  6.2600e-01,  4.5989e-01,\n",
       "           5.1793e-01,  1.6999e-01,  1.8639e+00, -5.6032e-01,  2.4748e-01,\n",
       "           4.2350e-01,  1.0158e+00, -1.1460e+00,  2.6054e-02, -4.4900e-01,\n",
       "           1.0798e+00,  1.6966e+00, -8.1465e-01, -9.1131e-02,  6.6657e-02,\n",
       "          -9.3812e-01,  1.0690e+00,  1.3530e+00, -3.8753e-01,  1.3537e+00,\n",
       "           1.1497e-01, -9.7546e-01, -1.3604e-01, -1.4537e+00, -6.3914e-01,\n",
       "           2.5381e-01, -8.6895e-01,  1.0793e-01,  4.3667e-01,  1.0148e+00,\n",
       "          -4.0063e-01,  1.5657e+00,  2.4177e+00, -1.7609e+00, -1.1956e+00,\n",
       "          -5.6827e-01, -1.9954e+00,  2.1211e-01,  4.1612e-01, -1.4363e+00,\n",
       "           1.0895e+00, -2.6252e+00, -2.0265e+00,  7.7868e-01, -6.8277e-01,\n",
       "          -7.0923e-01,  1.0137e+00, -2.1178e+00,  7.2808e-01, -5.0599e-01],\n",
       "         [ 1.4065e+00, -6.7929e-01, -6.8564e-02, -4.7752e-01, -5.5565e-01,\n",
       "          -9.3924e-01,  1.3010e+00,  9.6999e-01,  5.6815e-01,  7.1162e-01,\n",
       "          -1.0343e+00, -1.4927e+00, -2.6744e-01, -6.5440e-02, -3.6644e-01,\n",
       "          -3.2557e-01, -1.1803e+00,  9.4713e-02,  5.9504e-01,  1.6708e-01,\n",
       "           3.9515e-02, -1.7065e+00,  1.8814e+00, -3.3788e-01, -4.6474e-01,\n",
       "           1.1832e+00, -3.8335e-01, -4.8201e-01, -1.6187e+00, -8.2491e-01,\n",
       "          -1.3858e+00, -1.4922e+00,  6.9812e-01,  2.1898e-01, -1.3041e+00,\n",
       "           9.7221e-01,  1.7098e+00,  1.1515e+00,  8.2648e-01,  1.7793e+00,\n",
       "           7.3816e-01, -3.9431e-01,  2.4644e-01,  3.8826e-01, -1.6694e-01,\n",
       "           2.7531e+00,  3.1855e-01,  4.3728e-01, -1.6876e+00,  2.0403e+00,\n",
       "          -8.6284e-01, -4.7016e-01,  1.9008e+00, -4.2039e-01,  9.2801e-02,\n",
       "          -5.8216e-02,  6.9634e-01, -1.3166e+00, -1.7715e-01, -4.3288e-01,\n",
       "           1.0426e+00,  8.0649e-01, -5.6161e-01, -3.0726e-01,  1.5433e+00,\n",
       "          -6.4865e-01,  1.1717e+00,  1.4950e+00, -8.6422e-01, -1.6508e+00,\n",
       "          -1.2102e+00, -3.3072e-01, -1.9573e-01, -1.1345e+00,  2.2068e-01,\n",
       "          -4.8161e-01,  1.1828e+00,  1.1043e+00,  2.9504e-01,  5.1708e-01,\n",
       "           8.5603e-01,  6.8668e-01,  7.3749e-01, -4.7391e-01,  1.1199e+00,\n",
       "           2.1087e+00, -1.1436e+00,  3.6633e-01,  8.8203e-01, -3.1166e-01,\n",
       "          -1.7153e-01,  2.0807e+00, -1.8977e-01, -1.5593e+00,  1.8536e-01,\n",
       "          -2.2554e+00,  1.5169e+00, -6.8185e-01,  8.4843e-01, -1.9646e+00,\n",
       "           6.4835e-01, -1.2676e+00,  1.2228e+00, -7.0524e-01,  1.8917e+00,\n",
       "           7.5265e-01,  1.4233e-01,  2.0059e+00,  1.6996e+00, -9.2440e-01,\n",
       "           1.3687e+00, -4.9973e-01,  8.2693e-01, -6.0351e-01, -1.0181e+00,\n",
       "          -1.8499e-01,  7.5981e-01, -1.0888e-02,  6.2327e-01, -1.1236e-01,\n",
       "           8.3060e-01, -1.2511e+00,  1.1312e+00,  8.6450e-01, -1.5377e-01,\n",
       "          -1.0072e+00, -1.8069e+00,  5.4764e-01,  1.5666e+00, -1.2249e+00,\n",
       "          -1.3298e+00, -5.7913e-02,  1.6615e+00,  4.0714e-01, -2.0053e+00,\n",
       "           1.9716e+00,  1.0832e+00, -1.0528e-01, -7.8421e-01,  1.0799e+00,\n",
       "           1.0524e+00,  1.1503e+00, -8.7764e-01, -1.0904e+00, -6.6085e-01,\n",
       "           1.1271e+00,  1.9238e+00,  1.0697e+00,  6.2600e-01,  4.5989e-01,\n",
       "           5.1793e-01,  1.6999e-01,  1.8639e+00, -5.6032e-01,  2.4748e-01,\n",
       "           4.2350e-01,  1.0158e+00, -1.1460e+00,  2.6054e-02, -4.4900e-01,\n",
       "           1.0798e+00,  1.6966e+00, -8.1465e-01, -9.1131e-02,  6.6657e-02,\n",
       "          -9.3812e-01,  1.0690e+00,  1.3530e+00, -3.8753e-01,  1.3537e+00,\n",
       "           1.1497e-01, -9.7546e-01, -1.3604e-01, -1.4537e+00, -6.3914e-01,\n",
       "           2.5381e-01, -8.6895e-01,  1.0793e-01,  4.3667e-01,  1.0148e+00,\n",
       "          -4.0063e-01,  1.5657e+00,  2.4177e+00, -1.7609e+00, -1.1956e+00,\n",
       "          -5.6827e-01, -1.9954e+00,  2.1211e-01,  4.1612e-01, -1.4363e+00,\n",
       "           1.0895e+00, -2.6252e+00, -2.0265e+00,  7.7868e-01, -6.8277e-01,\n",
       "          -7.0923e-01,  1.0137e+00, -2.1178e+00,  7.2808e-01, -5.0599e-01],\n",
       "         [ 9.2043e-01,  3.5254e-01,  3.1074e-02,  8.7297e-01,  1.7054e-01,\n",
       "          -2.9151e-01, -1.6478e-01,  1.4281e-01,  1.2470e+00, -9.4481e-01,\n",
       "          -4.1579e-01,  9.3045e-01,  1.4510e+00, -6.7172e-01,  1.6109e-01,\n",
       "          -5.6448e-01, -2.4807e-01, -1.6702e+00, -7.4751e-01, -5.7129e-02,\n",
       "          -2.6423e+00,  1.3724e-01,  6.5096e-01,  3.5615e-01, -2.8117e-01,\n",
       "           1.2277e+00,  2.2336e-01, -5.4542e-01, -1.1115e+00, -2.0019e+00,\n",
       "          -1.7639e+00,  7.7521e-01,  6.3745e-01, -1.4377e+00, -7.6796e-01,\n",
       "           1.0341e-01, -9.2750e-01, -2.1050e+00,  7.7445e-01,  7.0041e-01,\n",
       "           3.3641e-01, -4.5820e-02, -6.6043e-02, -1.8037e-01, -2.0066e+00,\n",
       "          -9.4336e-01, -2.7488e-01, -5.2402e-01,  1.3991e+00, -1.7174e+00,\n",
       "           1.1668e+00,  3.0694e-01, -2.9573e-01,  1.2959e+00, -5.5508e-01,\n",
       "          -9.4162e-01,  7.7380e-02, -7.2844e-01, -4.2854e-02,  1.5618e-02,\n",
       "           9.2660e-01,  1.5260e-01,  4.1123e-01,  1.9060e+00,  1.0012e+00,\n",
       "          -2.3208e-01, -3.2461e+00,  5.7366e-01,  1.9893e+00, -5.4057e-02,\n",
       "           1.5859e-01, -1.4927e+00,  7.6295e-02, -4.0950e-01, -6.5809e-01,\n",
       "          -1.4875e+00, -8.4592e-02,  4.6090e-01, -1.5771e+00,  1.6274e+00,\n",
       "           8.6108e-02,  7.5893e-01,  6.2100e-01,  2.0418e-01, -7.9151e-01,\n",
       "          -1.7195e+00, -1.8673e+00, -1.6366e+00, -6.2011e-01,  5.7914e-01,\n",
       "          -4.0620e-01, -6.2437e-01,  4.5002e-01,  7.1724e-01,  9.3754e-01,\n",
       "           4.0860e-01,  1.5857e+00,  1.9742e-01, -1.7153e+00, -6.8119e-01,\n",
       "           3.8119e-01,  2.1129e+00,  3.6514e-01,  1.9110e-02,  4.5637e-01,\n",
       "           2.8903e-01, -2.7961e-01, -2.2656e+00, -1.9575e+00,  2.0791e+00,\n",
       "           2.8170e-01, -6.1591e-01, -1.3346e+00, -7.6439e-02,  1.2984e-01,\n",
       "          -8.9342e-01,  1.2861e+00,  2.3322e-01, -1.3867e+00,  3.0084e-01,\n",
       "          -2.6270e-01,  3.5333e-01, -1.3942e+00, -4.8201e-01, -6.9219e-01,\n",
       "           1.5810e+00,  1.0406e+00, -5.5638e-01,  1.6893e+00, -1.0111e+00,\n",
       "          -6.5792e-01, -2.4370e-01, -8.6770e-01,  1.1450e+00,  1.3985e+00,\n",
       "           3.9764e-01,  1.2112e+00, -8.2257e-01, -2.9584e-01,  2.6293e+00,\n",
       "           1.8337e-01,  2.8265e-04,  1.4005e+00,  1.2618e+00,  8.9992e-01,\n",
       "          -1.8356e+00, -2.3142e+00,  1.8573e+00,  4.3806e-01, -1.8866e-01,\n",
       "          -9.1244e-01, -5.5094e-02, -2.7850e+00, -3.9162e-02, -3.0820e-01,\n",
       "           2.5391e-01, -4.7353e-01, -2.3302e-01, -2.1577e+00,  2.4790e+00,\n",
       "           1.4718e-01, -9.3543e-01,  4.9229e-01,  1.7086e+00,  9.1635e-01,\n",
       "          -7.0124e-01, -2.6203e-01,  5.8486e-01,  9.9986e-01,  1.6343e+00,\n",
       "          -1.2848e+00,  2.0375e-01,  1.0646e+00, -6.7042e-01, -8.3602e-02,\n",
       "          -8.0860e-02, -1.0748e+00, -5.2231e-01, -1.1806e+00,  1.3254e+00,\n",
       "          -1.3974e+00, -1.4876e+00, -3.8976e-01,  1.9715e-01,  5.3642e-02,\n",
       "           6.7421e-01,  8.6174e-01,  1.4893e-01, -1.1260e+00, -9.3177e-01,\n",
       "           2.4162e+00,  3.1408e+00, -1.2226e+00,  5.4391e-02, -2.7254e+00,\n",
       "          -1.5049e+00, -3.8555e-01,  4.4443e-01,  1.2837e+00, -6.8935e-01]]),\n",
       " tensor([[ 0.0414],\n",
       "         [ 0.2021],\n",
       "         [ 0.1466],\n",
       "         [ 0.3199],\n",
       "         [-0.0907]])]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "next(iter(train_iter))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "epochs = 101\n",
    "lr = 0.0001\n",
    "import IPython\n",
    "import IPython.display\n",
    "device = torch.device(\"cpu\")\n",
    "def train(wd):\n",
    "    net = nn.Sequential(nn.Linear(n_inputs,1))\n",
    "    loss = nn.MSELoss()\n",
    "    optim = torch.optim.SGD([{\"params\":net[0].weight,\"weight_decay\":wd},\n",
    "                             {\"params\":net[0].bias}],lr=lr)\n",
    "    # optim = torch.optim.SGD(net.parameters(),lr=lr)\n",
    "    myshow = show([\"train\",\"test\"],\"epoch*3\",\"loss\")\n",
    "\n",
    "    for epoch in range(epochs):\n",
    "        for x, y in train_iter:\n",
    "            y_h = net(x)\n",
    "            l = loss(y_h, y)\n",
    "            # print(y_h[1])\n",
    "            optim.zero_grad()\n",
    "            l.backward()\n",
    "            optim.step()\n",
    "        with torch.no_grad():\n",
    "            if(epoch)%3 == 0:\n",
    "                IPython.display.clear_output(wait=True)\n",
    "                myshow.add([myshow.eval_loss(loss,net,train_iter,1,device),myshow.eval_loss(loss,net,test_iter,1,device)])\n",
    "                myshow.show_train()\n",
    "        # break\n",
    "    myshow.clear()\n",
    "    print(f\"W的范数: {net[0].weight.norm().item()}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:0.003433915553614497\n",
      "loss:0.06569154560565948\n"
     ]
    },
    {
     "data": {
      "image/png": "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3Lx506r+37621Q9by+7sh0KhsHmcNOW4aVYAcnV1xU8//QRfX1/s3r3bMnui0+lQVVXV6O14eHhApVKhpKREtLykpAReXl421/Hy8qp3/IEDB1BaWir6yp3RaMTcuXOxatUqXLx4sdH1ERERyV2/fv2sLkuZPn261Tg/Pz/s3btXtOz5558Xvf7t3+Da63rudP369WbV2VTNipTjxo3DrFmzMGvWLJw5cwYTJkwAYL43gJ+fX6O3o9FoMGTIEGRnZ1uWmUwmZGdnIzw83OY64eHhovGA+Xxx7finnnoKJ06cwLFjxyyP7t27IzExEV9++WUT95SIiIjao2bNAKWmpmLhwoW4fPkytm7dii5dugAwn36KjY1t0rYSEhIQFxeHoUOHYtiwYVi1ahUqKios3wqbNm0aevTogZSUFADAnDlzMHr0aCxfvhwTJ07Epk2bkJeXh7Vr1wIAunTpYqmnllqthpeXF/r379+c3SUiIqJ2plkByN3dHWvWrLFabuubVA2ZMmUKrl69ikWLFqG4uBihoaHIzMy0XOhcVFQkOg84fPhwbNy4EQsXLsSCBQvQt29fZGRkYNCgQc3ZFSIiIpKhZgWgzMxMuLq6YuTIkQDMM0Lr1q1DUFAQUlNT0alTpyZtLz4+HvHx8Tbfy8nJsVoWExODmJiYRm+f1/0QERHRnZp1DVBiYqLlq2bffvst5s6diwkTJuDChQtW9+ghIiIicjTNmgG6cOECgoKCAABbt27FQw89hDfffBP5+fmWC6KJiIiIHFWzZoA0Go3lbot79uxBREQEAKBz585NugkRERERkRSaNQM0cuRIJCQkYMSIEThy5AjS09MBAGfOnEHPnj1btEAiIiKiltasGaA1a9bAyckJW7Zswfvvv48ePXoAAL744gtERUW1aIFERERELa1ZM0C+vr74/PPPrZavXLnyrgtqz2pqanDp0iVotVrRnaqJiIjIvpr94yJGoxFbt27F66+/jtdffx3bt2+H0WhsydranVdffRX9+vXD8uXLpS6FiIioUR544AG8+OKLLba96dOnIzo6usW211zNmgE6d+4cJkyYgB9++MFyd+WUlBT4+Phg586dCAgIaNEi24vavpw/f17iSoiIiOStWTNAL7zwAgICAnD58mXk5+cjPz8fRUVF8Pf3xwsvvNDSNbYbvXv3BgB89913EldCRETU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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W的范数: 0.5587385892868042\n"
     ]
    }
   ],
   "source": [
    "train(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:0.0034621097147464752\n",
      "loss:0.005088252015411854\n"
     ]
    },
    {
     "data": {
      "image/png": "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kAUcASgrK4ucnJyyfdjRC/TOO3o0hoiISDkpAFnAMQQGZZwHBDB0qPlojH37YPt2F1cmIiLiHRSALODn50dISAhQjmGwsDC4/XZz/Z13XFyZiIiId1AAski5rgRzePBB8/X996GsQ2giIiKiAGSVck+EBujXDxo2hJ9/hpUrXVyZiIhI9acAZJFyXwoP4OsL991nruueQCIiImWmAGSRCvUAwYWrwVasgNRUF1UlIiLiHRSALFKhOUAAHTtC166QmwsffODCykRERKo/BSCLVGgIzMExGVrDYCIiImWiAGSRCg+BAQwfDn5+5v2Avv/eRZWJiIhUfwpAFqnwEBhAeDgMGmSu655AIiIipaYAZBGX9ADBhcnQ//435OdXsCoRERHvoABkEZfMAQK45RaoUwd++gm++MIFlYmIiFR/CkAWcckQGEBgINxzj7muydAiIiKlogBkEZcNgcGFq8GWLoVz5yp+PBERkWpOAcgiLhsCA+jZE9q0gcxMWLKk4scTERGp5hSALOLSHiCb7cJkaF0NJiIiclkKQBZxBKBz585ht9srfsD77jOD0Pr1cOxYxY8nIiJSjSkAWcQxBGYYBunp6RU/YJMmcMMN5vq//13x44mIiFRjCkAWCQ4Oxs/PD3DRMBhcmAz9zjtgGK45poiISDWkAGQRm83mukvhHe64A0JD4dAh2LLFNccUERGphhSALOTSidAANWrAnXea67onkIiISLEUgCzk0kvhHRxXgy1eDFlZrjuuiIhINaIAZCGXD4GBORE6KgrOnIFPP3XdcUVERKoRBSALuXwIDMDHB+6/31zXMJiIiEiRFIAsVClDYHBhGGzVKkhOdu2xRUREqgEFIAtVSg8QmI/F6NUL8vNh0SLXHltERKQaUACyUKXMAXJw9AItWKB7AomIiFxCAchClTYEBnDPPRAUBHv2wKZNrj++iIhIFaYAZKFKGwIDqFvXfD4YwKxZrj++iIhIFaYAZKFKHQIDePRR83XZMjh+vHK+Q0REpApSALJQpQ6BAXTqZN4XKD8f3nijcr5DRESkClIAslClDoE5PPaY+frWW3D+fOV9j4iISBWiAGShSh8CA7jlFmjWDH79Ff7978r7HhERkSpEAchCbukB8vWF//s/c/3113VJvIiICApAlnLMAcrJySGrMh9c+tBD5pPiv/sO1q6tvO8RERGpIhSA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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W的范数: 0.05317138507962227\n"
     ]
    }
   ],
   "source": [
    "train(3)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
